(presque) Tout ce dont votre package a besoin

Joseph Barbier - PyCon2025

A propos


Consulting

Open source

Data(viz)

Questions



Qui ne sait pas du tout ce qu’est un package Python ?


Qui a déjà créé un package Python ?


Qui contribue à des packages Python open source ?


Qui a déjà mis sur PyPI un package Python ?

TLDR: package Python

def my_super_cool_function(arg):
    if arg == "cool":
        something = 123
    else:
        ...

    ...

    return something

Facilement distribuable et donc reutilisable !

Le bon package et le mauvais package

Un bon package c’est pas (uniquement) une question de code.

  • facile à installer ?
  • facile à comprendre ?
  • facile à utiliser ?
  • facile à développer ?

Sommaire



Votre package a besoin de ces 3 choses, la dernière va vous surprendre 😱 !


  • pyproject.toml et gestion des dépendances

  • Tester dans les meilleures conditions

  • Créer la meilleure documentation

Gestion des dépendances

one ring file to rule them all


Un package ça se décompose en :

  • du code Python

  • des méta données

    • un nom, une description, des auteur.e.s
    • des dépendances (numpy, pandas, etc)
    • une license

pyproject.toml

one ring file to rule them all


pyproject.toml + uv = <3


Gestion des dépendances


Gestion des dépendances


Gestion des dépendances


Gestion des dépendances


Gestion des dépendances


  • open source → être convenient

numpy>=2.1.0



  • closed source → restreindre autant que possible

numpy==2.1.3

Tester son code

Tester son code

Tester son code ça veut dire quoi ?

  • vérifier que le code n’a pas d’erreur
  • vérifier que le code fait ce que je pense
  • vérifier que le code fonctionne dans différents scénarios
  • vérifier que le code fonctionne dans différents environnements


Il suffit de le faire tourner!

Il suffit de le faire tourner?

Comment (et quoi) tester

  • trust yourself
    • ❌ pas d’erreur
    • ❌ fait ce que je pense
    • ❌ différents scénarios
    • ❌ différents environnements
  • lancer un exemple d’utilisation
    • ✅ pas d’erreur
    • ❓ fait ce que je pense
    • ❌ différents scénarios
    • ❌ différents environnements
  • écrire des tests unitaires
    • ✅ pas d’erreur
    • ✅ fait ce que je pense
    • ✅ différents scénarios
    • ❌ différents environnements
  • git push ✅

Github actions

Scrits (yaml) qui se déclenchent dans certaines conditions

  • push
  • pull requests
  • tous les jours à minuit


→ faire tourner les tests unitaires

→ sur plusieurs versions de Python (open source ?)

→ sur plusieurs OS

Et cela tout le temps!

Github actions

sur plusieurs OS

Github actions

sur plusieurs OS ???


Warning

Python est interprété, mais peut se comporter différemment en fonction de l’OS

  • noms de fichiers
  • chemins
  • fichiers temporaires
  • permissions
  • modules spécifiques

Documentation

Documentation

La première (et la seule) chose que les gens verronts


Pour ça on a besoin de 2 choses:

  • Landing page
  • Diátaxis framework

Landing page

  • A quoi sert le package?
  • Dans quel contexte il s’inscrit (e.g., package Python)
  • Exemple usage minimaliste
  • Donner envie!

Landing page

Landing page

Landing page

Landing page

Exemple parfait: plotnine

Diátaxis framework (diataxis.fr)

Aller plus loin

Merci !

J’ai dis des choses fausses ?

  • venez m’en parler !

J’ai dis des choses pertinentes ?

  • venez m’en parler !


Autres ?